from langchain_community.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
from app.core.config import settings
from typing import List, Dict, Any

class LLMProcessor:
    """LLM处理器，用于分析产品信息"""
    
    @staticmethod
    async def analyze_product(text_contents: str) -> str:
        """
        分析产品信息
        
        Args:
            text_contents: 提取的文本内容
            
        Returns:
            str: 分析结果
        """
        try:
            # 构建提示词
            prompt = f"""
请根据以下提取的文本内容，分析产品信息并生成结构化的分析报告。
请包含以下方面：

### 主要功能特点
分析产品的主要功能和特点，每个特点需要详细说明。

### 技术参数
列出产品的关键技术参数，包括材质、规格等。

### 市场优势
分析产品的市场竞争优势。

### 竞品分析
与同类产品的对比分析。

### 核心亮点总结
总结产品最突出的3-5个亮点。

提取的文本内容：
{text_contents}

请生成详细的分析报告：
"""
            # 调用千问API
            response = await LLMProcessor._call_qwen_api(prompt)
            return response
            
        except Exception as e:
            print(f"分析产品失败: {str(e)}")
            raise
    
    @staticmethod
    async def analyze_with_prompt(prompt: str) -> str:
        """
        使用自定义提示词进行分析
        
        Args:
            prompt: 自定义提示词
            
        Returns:
            str: 分析结果
        """
        try:
            # 调用千问API
            response = await LLMProcessor._call_qwen_api(prompt)
            return response
            
        except Exception as e:
            print(f"分析失败: {str(e)}")
            raise
    
    @staticmethod
    async def _call_qwen_api(prompt: str) -> str:
        """调用千问API"""
        try:
            import requests
            import json
            
            headers = {
                "Authorization": f"Bearer {settings.QWEN_API_KEY}",
                "Content-Type": "application/json"
            }
            
            data = {
                "model": settings.LLM_MODEL_NAME,
                "messages": [
                    {"role": "system", "content": "你是一个专业的产品分析师，擅长分析产品特点和市场竞争力。"},
                    {"role": "user", "content": prompt}
                ],
                "temperature": 0.7,
                "max_tokens": 2000
            }
            
            response = requests.post(
                f"{settings.QWEN_BASE_URL}/chat/completions",
                headers=headers,
                json=data,
                timeout=30
            )
            
            if response.status_code == 200:
                result = response.json()
                return result["choices"][0]["message"]["content"]
            else:
                raise Exception(f"API调用失败: {response.status_code} - {response.text}")
                
        except Exception as e:
            print(f"调用千问API失败: {str(e)}")
            raise 